package com.ihr360.job.core.step.skip;


/**
 * Policy for determining whether or not some processing should be skipped.
 *
 * @author Lucas Ward
 * @author Dave Syer
 */
public interface SkipPolicy {

    /**
     * Returns true or false, indicating whether or not processing should
     * continue with the given throwable. Clients may use
     * {@code skipCount&lt;0} to probe for exception types that are skippable,
     * so implementations should be able to handle gracefully the case where
     * {@code skipCount&lt;0}. Implementations should avoid throwing any
     * undeclared exceptions.
     *
     * @param t exception encountered while reading
     * @param skipCount currently running count of skips
     * @return true if processing should continue, false otherwise.
     * @throws SkipLimitExceededException if a limit is breached
     * @throws IllegalArgumentException if the exception is null
     */
    boolean shouldSkip(Throwable t, int skipCount) throws SkipLimitExceededException;

}
